package com.kkb.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

//切面类（advice,pointcut）
@Aspect
@Component
public class MyAspect2 {



    public void before(JoinPoint joinPoint){//joinPoint指代要处理的目标对象的方法
        System.out.println("前置通知：在目标对象方法执行之前执行：");
    }
    public void afterReturning(Object result){
        System.out.println("后置通知：获得目标对象方法的返回值");
        System.out.println(result);
    }

    public void exception(JoinPoint joinPoint,Throwable ex){
        System.out.println(joinPoint.getSignature()+"方法抛出异常");
        System.out.println(ex.getMessage());
    }

//环绕通知：在目标对象的方法执行前后分别执行
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
       System.out.println("环绕通知----------------------------目标对象方法执行之前");
//执行目标对象的方法
       Object result = proceedingJoinPoint.proceed();
       System.out.println("环绕通知----------------------------目标对象方法执行之后");
       return result+"，孟庭苇";
   }

//最终通知： 最后被执行
    public void myAfter(){
        System.out.println("最后她还是走了。。。");
    }
}
